#include "common.h"

extern CheckData check_data;
/**
 * @brief 封装初始化以及链接mysql
 * @param conn_ptr MYSQL指针
 * @param host 主机地址
 * @param user 用户名
 * @param pwd 密码
 * @param db 哪个数据库
 */
int myMysql_init(MYSQL *conn_ptr,
                 const char *host,
                 const char *user,
                 const char *pwd,
                 const char *db)
{
    if (!mysql_init(conn_ptr))
    {
        fprintf(stderr, "mysql_init failed\n");
        return EXIT_FAILURE;
    }
    conn_ptr = mysql_real_connect(conn_ptr, host, user, pwd, db, 0, NULL, 0);
    if (!conn_ptr)
    {
        printf("mysql_connect failed\r\n");
        return EXIT_FAILURE;
    }
    printf("mysql_connect success\r\n");
    return EXIT_SUCCESS;
}

/**
 * @brief 关闭数据库
 * @param conn_ptr MYSQL指针
 */
int myMysql_close(MYSQL *conn_ptr)
{
    mysql_close(conn_ptr);
    return EXIT_SUCCESS;
}

/**
 * @brief 查询数据库
 * @param conn_ptr MYSQL 指针
 * @param res_Json 用于带出json
 */
int myMysql_select(MYSQL *conn_ptr, char **res_Json, JsonStruct *__data)
{
    MYSQL_RES *res_ptr;
    MYSQL_ROW sqlrow;
    cJSON *root, *array;
    if (0 != mysql_query(conn_ptr, SELECT_WEEK_DATA))
    {
        fprintf(stderr, "%s\n", mysql_error(conn_ptr));
        return EXIT_FAILURE;
    }

    // 保存查询结果
    res_ptr = mysql_store_result(conn_ptr);
    if (res_ptr == NULL)
    {
        fprintf(stderr, "%s\n", mysql_error(conn_ptr));
        return EXIT_FAILURE;
    }
    // 循环构建json数据
    root = cJSON_CreateObject(); // 创建一个对象
    array = cJSON_CreateArray(); // 创建一个数组

    cJSON_AddItemToObject(root, "infos", array);
    // 把发过来的的值进行
    cJSON *tmp = cJSON_CreateObject();
    cJSON_AddItemToArray(array, tmp);
    cJSON_AddItemToObject(tmp, "oders", cJSON_CreateNumber((__data->oders) + 1));
    cJSON_AddItemToObject(tmp, "id", cJSON_CreateNumber(__data->id));
    cJSON_AddItemToObject(tmp, "l_food", cJSON_CreateNumber(__data->l_food));
    cJSON_AddItemToObject(tmp, "r_food", cJSON_CreateNumber(__data->r_food));
    cJSON_AddItemToObject(tmp, "l_water", cJSON_CreateNumber(__data->l_water));
    cJSON_AddItemToObject(tmp, "r_water", cJSON_CreateNumber(__data->r_water));
    cJSON_AddItemToObject(tmp, "happy", cJSON_CreateNumber(__data->happy));
    cJSON_AddItemToObject(tmp, "temperature", cJSON_CreateNumber(__data->temperature));
    cJSON_AddItemToObject(tmp, "humidity", cJSON_CreateNumber(__data->humidity));
    cJSON_AddItemToObject(tmp, "c_date", cJSON_CreateString(__data->c_date));
    cJSON_AddItemToObject(tmp, "entrust", cJSON_CreateNumber(__data->entrust));

    while ((sqlrow = mysql_fetch_row(res_ptr)))
    {
        cJSON *item = cJSON_CreateObject();
        cJSON_AddItemToArray(array, item);
        cJSON_AddItemToObject(item, "oders", cJSON_CreateNumber(atoi(sqlrow[0])));
        cJSON_AddItemToObject(item, "id", cJSON_CreateNumber(atoi(sqlrow[1])));
        cJSON_AddItemToObject(item, "l_food", cJSON_CreateNumber(atoi(sqlrow[2])));
        cJSON_AddItemToObject(item, "r_food", cJSON_CreateNumber(atoi(sqlrow[3])));
        cJSON_AddItemToObject(item, "l_water", cJSON_CreateNumber(atoi(sqlrow[4])));
        cJSON_AddItemToObject(item, "r_water", cJSON_CreateNumber(atoi(sqlrow[5])));
        cJSON_AddItemToObject(item, "happy", cJSON_CreateNumber(atoi(sqlrow[6])));
        cJSON_AddItemToObject(item, "temperature", cJSON_CreateNumber(atoi(sqlrow[7])));
        cJSON_AddItemToObject(item, "humidity", cJSON_CreateNumber(atoi(sqlrow[8])));
        cJSON_AddItemToObject(item, "c_date", cJSON_CreateString(sqlrow[9]));
        cJSON_AddItemToObject(item, "entrust", cJSON_CreateNumber(atoi(sqlrow[10])));
    }
    // 将转换后的json带出
    *res_Json = cJSON_PrintUnformatted(root);
    printf("json --- %s\r\n", *res_Json);

    // 输出JSON字符串
    printf("json print --- %s\r\n", cJSON_Print(root));
    // 释放查询结果
    mysql_free_result(res_ptr);
    cJSON_Delete(root);
    return EXIT_SUCCESS;
}

/**
 * @brief 插入animal_log表数据
 * @param conn_ptr MYSQL指针
 * @param sql sql语句
 */
int myMysql_execute(MYSQL *conn_ptr, char *sql)
{
    char sql_buffer[BUF_SIZE] = {0};
    strcpy(sql_buffer, sql);

    if (0 != mysql_query(conn_ptr, sql_buffer))
    {
        fprintf(stderr, "%s\n", mysql_error(conn_ptr));
        return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
}

/**
 * @brief 更新温湿度
 * @param sql_ptr mysql指针
 * @param data 带有温湿度的结构体
 */
int updateTandH(MYSQL *sql_ptr)
{
    MYSQL_RES *res_ptr;
    MYSQL_ROW sqlrow;
    if (0 != mysql_query(sql_ptr, SELECT_NEW_DATA))
    {
        fprintf(stderr, "%s\n", mysql_error(sql_ptr));
        return EXIT_FAILURE;
    }
    res_ptr = mysql_store_result(sql_ptr);
    if (res_ptr == NULL)
    {
        fprintf(stderr, "%s\n", mysql_error(sql_ptr));
        return EXIT_FAILURE;
    }

    if ((sqlrow = mysql_fetch_row(res_ptr)))
    {
        check_data.id = atoi(sqlrow[0]);
    }
    char sql_buf[BUF_SIZE];
    memset(sql_buf, 0, sizeof(sql_buf));
    sprintf(sql_buf, UPDATE_H_T, check_data.temperature, check_data.humidity, check_data.id);
    if (0 != mysql_query(sql_ptr, sql_buf))
    {
        fprintf(stderr, "%s\n", mysql_error(sql_ptr));
        return EXIT_FAILURE;
    }
    mysql_free_result(res_ptr);
    return EXIT_SUCCESS;
}
